package sgsi.model.entidades;

import java.util.HashSet;
import java.util.Set;

import sgsi.model.entidades.alarmas.AlarmablePorVencimiento;
import sgsi.model.entidades.auxiliares.BorradoLogico;

public class TipoDeArticulo extends BorradoLogico implements AlarmablePorVencimiento{
	private int codigoTipoDeArticulo;
	private String nombre;
	private String descripcion;
	private RangoDeTemperatura rangoDeTemperatura;
	private boolean aireLibre;
	private boolean accesoRestringido;
	private boolean perecedero;
	private Set<TipoDeArticulo> tiposDeArticuloCompatibles;

	public TipoDeArticulo() {
		tiposDeArticuloCompatibles = new HashSet<TipoDeArticulo>();
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public RangoDeTemperatura getRangoDeTemperatura() {
		return rangoDeTemperatura;
	}

	public void setRangoDeTemperatura(RangoDeTemperatura rangoDeTemperatura) {
		this.rangoDeTemperatura = rangoDeTemperatura;
	}

	public boolean isAireLibre() {
		return aireLibre;
	}

	public void setAireLibre(boolean aireLibre) {
		this.aireLibre = aireLibre;
	}

	public boolean isAccesoRestringido() {
		return accesoRestringido;
	}

	public void setAccesoRestringido(boolean accesoRestringido) {
		this.accesoRestringido = accesoRestringido;
	}

	public boolean isPerecedero() {
		return perecedero;
	}

	public void setPerecedero(boolean perecedero) {
		this.perecedero = perecedero;
	}

	public int getCodigoTipoDeArticulo() {
		return codigoTipoDeArticulo;
	}

	public void setCodigoTipoDeArticulo(int codigo) {
		this.codigoTipoDeArticulo = codigo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codigoTipoDeArticulo;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		TipoDeArticulo other = (TipoDeArticulo) obj;
		if (codigoTipoDeArticulo != other.codigoTipoDeArticulo)
			return false;
		return true;
	}

	public void setTiposDeArticuloCompatibles(Set<TipoDeArticulo> tiposDeArticuloCompatibles) {
		this.tiposDeArticuloCompatibles = tiposDeArticuloCompatibles;
	}

	public Set<TipoDeArticulo> getTiposDeArticuloCompatibles() {
		return tiposDeArticuloCompatibles;
	}
	
	public void quitarTipoDeArticuloCompatible(TipoDeArticulo tipoDeArticuloCompatible) {
		tiposDeArticuloCompatibles.remove(tipoDeArticuloCompatible);	
	}

	public void agregarTipoDeArticuloCompatible(TipoDeArticulo tipoDeArticuloCompatible) {
		tiposDeArticuloCompatibles.add(tipoDeArticuloCompatible);		
	}
	
	@Override
	public boolean puedeSerBorrada() {
		// TODO Auto-generated method stub
		return true;
	}

	public boolean esCompatibleCon(TipoDeArticulo tipoDeArticulo) {
		for(TipoDeArticulo tipoDeArticuloCompatible : tiposDeArticuloCompatibles) {
			if (tipoDeArticuloCompatible.equals(tipoDeArticulo) && (! tipoDeArticuloCompatible.getEstaBorrado())) {
				return true;
			}			
		}
		
		return false;
	}
}
